// Package models 定义数据模型结构体
// 该包使用GORM标签来映射数据库表结构
package models

import (
	"time"

	"gorm.io/gorm"
)

// TaskStatus 任务状态枚举类型
type TaskStatus int

// 任务状态常量定义
const (
	// StatusNew 新建状态
	StatusNew TaskStatus = iota
	// StatusInProgress 进行中状态
	StatusInProgress
	// StatusCompleted 已完成状态
	StatusCompleted
)

// Task 任务模型结构体
// 映射数据库中的tasks表
type Task struct {
	// ID 任务唯一标识符，使用数据库自增ID
	ID uint64 `gorm:"primaryKey;column:id;type:bigint GENERATED BY DEFAULT AS IDENTITY" json:"id"`
	// UserID 关联的用户ID
	UserID uint64 `gorm:"column:user_id;type:bigint;not null;index" json:"user_id"`
	// GroupID 关联的任务分组ID
	GroupID uint64 `gorm:"column:group_id;type:bigint;not null;index" json:"group_id"`
	// Title 任务标题
	Title string `gorm:"column:title;type:varchar(255);not null" json:"title"`
	// Description 任务描述
	Description string `gorm:"column:description;type:text" json:"description"`
	// IsImportant 是否为重要任务
	IsImportant bool `gorm:"column:is_important;type:boolean;default:false" json:"is_important"`
	// IsMyDay 是否为"我的一天"任务
	IsMyDay bool `gorm:"column:is_my_day;type:boolean;default:false" json:"is_my_day"`
	// Status 任务状态
	Status TaskStatus `gorm:"column:status;type:smallint;default:0" json:"status"`
	// CompletedAt 任务完成时间
	CompletedAt *time.Time `gorm:"column:completed_at" json:"completed_at"`
	// DueDate 任务截止日期
	DueDate *time.Time `gorm:"column:due_date" json:"due_date"`
	// CreatedAt 创建时间
	CreatedAt time.Time `gorm:"column:created_at;default:CURRENT_TIMESTAMP" json:"created_at"`
	// UpdatedAt 更新时间
	UpdatedAt time.Time `gorm:"column:updated_at;default:CURRENT_TIMESTAMP" json:"updated_at"`
	// DeletedAt 软删除时间戳，使用GORM的DeletedAt类型
	DeletedAt gorm.DeletedAt `gorm:"column:deleted_at;index" json:"-"`
	// User 关联的用户对象
	User User `gorm:"foreignKey:UserID" json:"-"`
	// Group 关联的任务分组对象
	Group TaskGroup `gorm:"foreignKey:GroupID" json:"-"`
	// Logs 关联的任务日志列表
	Logs []TaskLog `gorm:"foreignKey:TaskID" json:"-"`
}

// TableName 指定Task模型对应的数据库表名
// 返回值: string - 表名
func (Task) TableName() string {
	return "tasks"
}
